import { LiveEvent, LiveUpdater, type LiveUpdatePlayer } from '../App';

// 演示：周期性上报比分 + 触发高光/发送弹幕
// 运行方式（示例）：在你的工程内按 TS 构建流程编译，或在游戏循环中直接调用。

const live = LiveEvent.getInstance();
const updater = new LiveUpdater({ key: 'demo_player_extras' });

async function init() {
  const worldUrl = world.url;
  const Edit = String(worldUrl).includes('/e/');
  live.useTestData(!!Edit);
  await live.refreshNow();
}

async function pushLoopOnce() {
  const match = live.getCurrentMatch();
  if (!match) {
    return;
  }

  // 示例：随机比分 + 部分玩家扩展数据
  const scores = {
    teamA: Math.floor(Math.random() * 20),
    teamB: Math.floor(Math.random() * 20),
  };
  const extras: Record<number, Partial<LiveUpdatePlayer>> = {
    101: { score: Math.floor(Math.random() * 30), hp: 100, kda: '2/1/3' },
    102: { score: Math.floor(Math.random() * 30) },
  };

  await updater.pushFromMatch(match, scores, extras);
}

async function triggerHighlightAndDanmaku() {
  const match = live.getCurrentMatch();
  if (!match) {
    return;
  }

  // 立刻触发“单一高光”
  await updater.pushHighlightNow(match, {
    reason: 'Objective Captured',
    teamNames: ['Team A'],
    playerIds: [101],
    immediate: true,
  });

  // 发送一条弹幕
  await updater.pushDanmakuNow(match, {
    text: '漂亮拿点！',
  });

  // 可选：延时清空高光
  setTimeout(() => {
    updater.stopHighlightNow(match).catch(() => {});
  }, 3000);
}

async function main() {
  await init();

  // 周期性上报比分（每 1 秒）
  setInterval(() => {
    pushLoopOnce().catch((err) => {
      // 重试/退避建议：此处仅打印，生产环境请按需增加重试策略
      console.warn('[pushFromMatch] failed', err);
    });
  }, 1000);

  // 演示：每 ~10 秒触发一次高光/弹幕
  setInterval(() => {
    triggerHighlightAndDanmaku().catch((err) => {
      console.warn('[highlight/danmaku] failed', err);
    });
  }, 10000);
}

main().catch((e) => console.error(e));
